package cn.edu.gzhu.workOrderManagement.pojo.entity;

import cn.edu.gzhu.workOrderManagement.enumeration.WorkOrderProcessingStatusEnum;
import cn.edu.gzhu.workOrderManagement.typeHandles.ListTypeHandle;
import cn.edu.gzhu.workOrderManagement.typeHandles.MapTypeHandle;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * 1、客户创建工单时：直接创建，不填写工单归属分公司、归属组别等参数，因为客户没有查看组织内部架构与组织员工的权限，然后下一级规定为总部商务，总部商务创建工单时，则略过客户创建工单的步骤，后续步骤相同。
 * 2、总部商务需要填写工单归属分公司、分公司负责人等参数，然后工单转入分公司。
 * 3、分公司商务接到工单，填写工单归属组别等参数，然后转入负责此类问题的小组，工单转入分公司主管。
 * 4、分公司主管接到工单，可转单填写负责的组员，也可以自己处理，负责的组员填写自己。（这里的理解是分公司主管实际上是一个小组的负责人）
 */
@Data
public class WorkOrder {
    /**
     * 主键id，不对外展示
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 唯一表示符，对外展示
     */
    private String uuid;
    /**
     *所属工单，使用WorkOrderTypeConstant，普通工单、重诉工单、材料工单
     */
    private String type;
    /**
     * 工单类型 协商工单、投诉工单、绿通工单、核实工单
     */
    private String workOrderCategory;
    /**
     * 跟进状态,使用WorkOrderFollowStatus
     */
    private String followStatus;
    /**
     * 工单预警级别，使用WorkOrderAlertLevelConstant
     */
    private Integer alertLevel;
    /**
     * 分公司负责人，用户输入
     */
    private String branchLeader;
    /**
     * 归属分公司
     */
    private String branchName;
    /**
     * 归属组别,用户输入
     */
    private Integer teamId;
    /**
     * 归属组员，用户输入
     */
    private String teamMember;

    /**
     * 工单状态
     */
    private WorkOrderProcessingStatusEnum processingStatus;
    /**
     * 工单实际结束时间
     */
    private LocalDateTime endTime;

    /**
     * 工单预期结束时间
     */
    private LocalDateTime expectedEndTime;
    /**
     * 手别,用户输入
     */
    private String manualType;
    /**
     * 上级回复意见,key是用户姓名和回复时间
     */
    @TableField(typeHandler = MapTypeHandle.class)
    private LinkedHashMap<String,String> reviewComment;
    /**
     *工单重复次数
     */
    private Integer repeatTime;
    /**
     * 材料工单的材料链接
     */
    @TableField(typeHandler = ListTypeHandle.class)
    private List<String> material;
    /**
     * 委托方
     */
    private String delegator;




    /**
     * 工单请求者，用户输入
     */
    private String requestUser;

    /**
     * 工单请求者的身份证，用户输入
     */
    private String requestIdCard;

    /**
     * 逻辑卡号，用户输入
     */
    private String logicalCardNumber;

    /**
     * 案件号，用户输入
     */
    private String caseNumber;
    /**
     * 类别，用户输入
     */
    private String category;
    /**
     * 工单内容
     */
    @TableField(typeHandler = ListTypeHandle.class)
    private List<String> content;
    /**
     * 银行处理建议,用户输入
     */
    private String bankProcessingAdvice;
    /**
     * 是否为监管投诉，用户输入
     */
    private Boolean isRegulatoryComplaint;
    /**
     * 经办人,用户输入
     */
    private String handler;
    /**
     * 内部核实情况,用户输入
     */
    private String processedDetails;
    /**
     * 委案批次,用户输入
     */
    private String caseBatch;
    /**
     * 工单标题
     */
    private String title;
    /**
     * 处理上传的附件链接
     */
    @TableField(typeHandler = ListTypeHandle.class)
    private List<String> annex;
    /**
     * 敏感字眼
     */
    private Boolean isSensitive;
    /**
     * 客户手机号
     */
    private String phoneNumber;
    /**
     * 投诉号码
     */
    @TableField(typeHandler = ListTypeHandle.class)
    private List<String> complaintNumber;

    /**
     * 是否重诉工单
     */
    private Boolean isKeyComplaint;

    /**
     * 地区
     */
    private String clientNumber;


    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;


    private String teamName;

    /**
     * 是否转单
     */
    private Boolean isReassignment;

    /**
     * 是否被删除
     */
    private Boolean isDeleted;

}
